ohibc logo
OHI British Columbia | OHI Science | Citation policy

1 Summary: OHIBC Species Subgoal (Biodiversity)

This script prepares scores (status and trend) for species richness in British Columbia’s coastal regions. Spatial data from IUCN and Aquamaps is combined with extinction risk information from IUCN and conservation rank info based on province-level NatureServe categories.

Currently, the Species Richness sub-goal model is identical to the OHI Global model: a region’s status is based upon an area-weighted average of species health across each BC reporting region.

From Halpern et al (2012):

The target for the Species sub-goal is to have all species at a risk status of Least Concern. We scaled the lower end of the biodiversity goal to be 0 when 75% species are extinct, a level comparable to the five documented mass extinctions and would constitute a catastrophic loss of biodiversity. The Status of assessed species was calculated as the area- and threat status-weighted average of the number of threatened species within each 0.5 degree grid cell.

Mean risk status per cell:

\[\bar{R}_{cell} = \frac{\displaystyle\sum_{species}(Risk)}{n_{spp}}\]

Mean risk status per region:

\[\bar{R}_{SPP} = \frac{\displaystyle\sum_{cells}(\bar{R}_{cell} * A_{cell} * pA_{cell-rgn})}{A_{rgn}}\]

Species goal model

\[X_{SPP} = \frac{((1 - \bar{R}_{SPP}) - 0.25)}{(1 - 0.25)} * 100%\]

where:


2 Data sources

AquaMaps

IUCN Red List spatial data: species range map shapefiles

IUCN Red List species index: list of all IUCN red list species, incl IUCN species ID and extinction risk category

NatureServe/BC CDC conservation rank info from BC Species and Ecosystems Explorer:

NOTE: Davies and Baum (2012) could potentially provide a small number of additional species, as in the California Current OHI, but for now we are not considering this in our assessment.


3 Methods

3.1 Define assessment regions

Using OHIBC region polygons, determine 0.5° raster cells corresponding to each region.

## Reading OHIBC regions shapefile...
##   ~/github/ohibc/prep/spatial/ohibc_rgn_wgs84.shp

3.1.1 Map of region ID per cell

Note that subs() can’t deal with duplicate cell IDs; for cells included in two or more regions, displaying the minimum region ID value


3.2 Identify BC-specific species

The rgn2cell_df dataframe identifies cells local to British Columbia. Using these cell identifiers we can identify the species local to British Columbia in both the AquaMaps dataset and the IUCN/BLI dataset.

These species-per-cell tables are generated from global SPP goal data, from AquaMaps data and IUCN range maps, filtered to just OHIBC regions.


3.3 Load species lookup table from global SPP goal

Currently this uses the global species lookup table. How this list is generated (file locations are in ~/github/ohiprep/globalprep/SPP_ICO):

  • in ingest_iucn.R:
    • Pull full IUCN list from http://api.iucnredlist.org/index/all.csv
    • Filter the list to marine species as indicated on each species page
    • Standardize old extinction risk categories
    • Append population trend and parent/subpop info from species web pages
    • Write to spp_iucn_mar.csv in git-annex.
  • in spp_fxn.R::create_spp_master_lookup():
    • Pull in Aquamaps species information table, create sciname field and standardize categories
    • Pull in IUCN marine species info from ingest_iucn.R
    • full_join() the two species lists
    • Determine overall category, trend, and spatial info source (preferring IUCN)
    • Remove duplicate records and data-deficient records
    • Convert text extinction risk category and popn trends to number values
    • Identify parent/subpopulations and aliases within spatial_source field.

3.4 Append BC-specific species risk assessment codes

Data downloaded from BC Species and Ecosystems Explorer includes information on global status and provincial status for species, as assessed by NatureServe.

See this table for info on NatureServe codes

spp_all <- spp_append_bcsee(spp_all)

spp_all <- spp_all %>%
  mutate(iucn_score = cat_score,
         cat_score = ifelse(!is.na(status_pr_score), status_pr_score, cat_score)) %>%
  filter(!is.na(cat_score)) %>%
  filter(am_sid %in% am_cells_spp$am_sid & str_detect(spatial_source, 'am') | 
           iucn_sid %in% iucn_cells_spp$iucn_sid & str_detect(spatial_source, 'iucn'))
  
write_csv(spp_all, file.path(dir_goal, 'int/spp_all_raw.csv'))

### NOTE: if we want to exclude BLI data, this is where we would have to do it
# spp_all <- spp_all %>%
#   mutate(spatial_source = ifelse(spatial_source == 'iucn-bli' & !is.na(am_sid), 'am', spatial_source)) %>%
#   filter(!spatial_source == 'iucn-bli')

### let's clean up this file and ditch the legacy columns.  Lose the reference
### columns, and to ditch multi-listings, group by am_sid and iucn_sid; then
### take the mean category and trend across all multi-listed species.
spp_clean <- spp_all %>%
  select(am_sid, iucn_sid, sciname, spp_group,
         #id_no, iucn_subpop, pop_trend, pop_cat, status_pr, 
         pr_score = status_pr_score,
         spatial_source, 
         cat_score, trend_score) %>%
  group_by(am_sid, iucn_sid, spatial_source) %>%
  summarize(sciname     = first(sciname), ### just to have a handy text handle?
            cat_score   = mean(cat_score,   na.rm = TRUE),
            pr_score    = mean(pr_score,    na.rm = TRUE),
            trend_score = mean(trend_score, na.rm = TRUE),
            pr_score    = ifelse(is.nan(pr_score),    NA, pr_score),
            trend_score = ifelse(is.nan(trend_score), NA, trend_score)) %>%
  ungroup()

write_csv(spp_clean, file.path(dir_goal, 'int/spp_all_clean.csv'))

Variables in spp_all: am_sid | am_cat | sciname | iucn_sid | pop_trend | pop_cat | spp_group | id_no | iucn_subpop | spatial_source | cat_score | trend_score | status_gl | status_pr | status_gl_score | status_pr_score | iucn_score

Quick glance at global spp_all dataframe:
am_sid iucn_sid spatial_source sciname cat_score pr_score trend_score
Fis-116901 155077 am Lycenchelys monstrosa 0.0 NA NA
Fis-120470 154969 am Kuronezumia bubonis 0.0 NA NA
Fis-123736 170341 iucn Thunnus orientalis 0.4 NA -0.5
Fis-126093 15148566 am Conocara salmoneum 0.0 NA NA
Fis-13152 13462250 am Guentherus altivela 0.0 NA NA
Fis-131582 196058 am Myxine hubbsi 0.0 NA NA

3.5 time series scraping

## [1] 138

3.5.1 plot the changing species?


3.6 Generate species per cell tables for Aquamaps and IUCN

Using the modified spp_clean dataframe, and the species-to-cell tables identified for the BC region, we summarize mean category and trend per cell for both AquaMaps and IUCN. Tracking the number of species used from each dataset allows us to combine these two summaries in a weighted mean.

3.6.1 Map of species count by cell


4 Calculate goal model

4.1 Summarize mean category & trend per cell & region

In this section we perform the model calculations:

  • We calculate mean extinction risk score across all species identified in each cell, based on NatureServe province-level rankings where available, and IUCN category ranks elsewhere.
    • IUCN ranks exclude subpopulation scores due to lack of spatially explicit distribution info for subpopulations.
  • We calculate mean population trend across all species identified in each cell, based on IUCN population trend information.
  • From raster-level summaries, we generate a region-level summary based on area-weighted average extinction risk and population trend.
  • From the region-level summary of risk, we determine the SPP goal status based on the goal model equation. SPP trend is identical to the regional average population trend score.

4.1.1 Map of mean extinction risk category value by cell

Category value range: least concern = 0, extinct = 1


4.2 Create and save final output files

Status and trend layers saved to data folder.

## Writing SPP status and trend based only on IUCN categories to:
##   ~/github/ohibc/prep/spp_ico/v2016/output/spp_status_timeseries.csv
##   ~/github/ohibc/prep/spp_ico/v2016/output/spp_trend_timeseries.csv

4.2.1 Plot map of status by region

The maps and tables show status based upon rankings from NatureServe (where available) and IUCN (where NatureServe is not available). Currently no trend information is taken from NatureServe, so trend is based entirely on IUCN rankings.

4.2.2 Plot scores time series


4.3 Summarize mean category/trend within 3 nm of shore

Create final outputs for 3nm zone for resilience calculations. In this step, rather than using full assessment regions, only the three-nautical-mile offshore zone is examined.

## Reading OHIBC 3nm offshore regions shapefile...
##   ~/github/ohibc/prep/spatial/ohibc_offshore_3nm_wgs84.shp
## Writing SPP status and trend for 3nm regions to:
##   ~/github/ohibc/prep/spp_ico/v2016/output/spp_status_3nm.csv
##   ~/github/ohibc/prep/spp_ico/v2016/output/spp_trend_3nm.csv

5 Provenance